package com.wongoing.sys.action;

import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.wongoing.apiclient.alipay.query.Alipay;
import com.wongoing.apiclient.weixin.WXPayHelper;
import com.wongoing.base.BaseSubjectModel;
import com.wongoing.bus.util.Constants;
import com.wongoing.bus.util.PayUrlConstants;
import com.wongoing.sys.model.SysPermission;
import com.wongoing.sys.service.SysPermissionService;
import com.wongoing.util.DateConvert;
import com.wongoing.util.DateStyle;
import com.wongoing.util.IpUtil;
import com.wongoing.util.LogService;
import com.wongoing.util.NumberUtil;
import com.wongoing.util.QRCodeUtil;

public class BaseAction {
	private SysPermissionService spService;
	//private PassOrderService passOrderService;
	@Autowired
	public void setSpService(SysPermissionService spService) {
		this.spService = spService;
	}

//	@Autowired
//	public void setPassOrderService(PassOrderService passOrderService) {
//		this.passOrderService = passOrderService;
//	}


	/**
	 * 功能说明：fastjson根据时间格式输出json
	 * 修改说明：
	 * @author zhenglibing
	 * @date 2017年10月15日 下午12:17:52
	 * @param object
	 * @param dateFormat
	 * @return
	 */
	public String OutputJson(Object object,String dateFormat) {
		String json = JSON.toJSONStringWithDateFormat(object ,dateFormat ,SerializerFeature.DisableCircularReferenceDetect);
		return json;
	}
	/**
	 * 功能说明：fastjosn object转json 普通类
	 * 修改说明：
	 * @author Administrator
	 * @date 2017年10月15日 下午12:18:23
	 * @param object
	 * @return
	 */
	public String OutputJson(Object object) {
		String json = JSON.toJSONString(object);
		return json;
	}
	/**
	 * 功能说明：获取菜单页的tabid
	 * 修改说明：
	 * @author Administrator
	 * @date 2017年10月15日 下午12:18:41
	 * @param sysId
	 * @return
	 * @throws Exception
	 */
	public String tabid(String sysId) throws Exception{
		String tabid = "doc-";	
		Map<String,Object> param = new HashMap<String, Object>();
		param.put("sysId",sysId);
		param.put("status", "0");
		param.put("isUsed", "Y");
		List<SysPermission> list =  this.spService.getByParam(param);
		if(list!=null && !list.isEmpty()){
			tabid += list.get(0).getSysId()+list.get(0).getId();
			LogService.getInstance(this).debug("菜单tabid："+tabid);
		}else{
			tabid += sysId + "0";
		}
		return tabid;
	}
	
//	/**
//	 * 功能说明：根据支付方式不同获取不同支付信息
//	 * 修改说明：
//	 * @author 吴兆强
//	 * @date 2017年12月29日 上午9:51:29
//	 * @param user_return_url 同步通知地址（微信支付宝通用）
//	 * @param user_notice_url 异步通知地址（目前仅支付支付宝）
//	 * @param bsm 用户数据实体
//	 * @param request 请求体
//	 * @param payRadio 选择支付方式的radio
//	 * @param orderNumber 订单号
//	 * @param orderId 订单ID
//	 * @param bank 银联支付所选择的银行编号
//	 * @return 统一返回表单，在相应页面进行支付操作或显示失败信息
//	 * @throws Exception
//	 */
//	public String getPayResult(String user_return_url, String user_notice_url, BaseSubjectModel bsm, HttpServletRequest request, String payRadio,String orderNumber,Integer orderId,String bank) throws Exception {
//		boolean orderPaidFlag = false;
//		boolean wxPaidFlag = false;
//		boolean alipayPaidFlag = false;
//		String result  = "<form id=\"WXPayForm\" method=\"post\" action=\""+PayUrlConstants.pay_error_notice_url+"\"> \n ";
//		result += "<input type=\"hidden\" name=\"wxpay_content\" value=\"{";
//		result += "&quot;errorMsg&quot;:&quot;%s&quot;";
//		result += "}\">";
//		result += "</form>";
//		result += "<script>document.forms[0].submit()</script>";
//		Map<String,Object> param = new HashMap<String, Object>();
//		PassOrder order = null;
//		if(orderNumber!=null && orderId!=null) {
//			param.put("orderNumber", orderNumber);
//			param.put("id", orderId);
//			param.put("status", Constants.STATUS_NORMAL);
//			List<PassOrder> orderSqlList = this.passOrderService.getByParam(param);
//			if(orderSqlList!=null && !orderSqlList.isEmpty() && orderSqlList.size()==1) {
//				order = orderSqlList.get(0);
//			}
//		}
//		
//		if(orderNumber!=null && orderId==null) {
//			param.clear();
//			param.put("orderNumber", orderNumber);
//			param.put("status", Constants.STATUS_NORMAL);
//			List<PassOrder> orderSqlList = this.passOrderService.getByParam(param);
//			if(orderSqlList!=null && !orderSqlList.isEmpty() && orderSqlList.size()==1) {
//				order = orderSqlList.get(0);
//			}
//		}
//		
//		if(orderNumber==null && orderId!=null) {
//			order =  this.passOrderService.getByPrimaryKey(orderId);
//		}
//		
//		if(order==null || order.getStatusId()==null) {
//			result = String.format(result, "该订单异常，请重新下单或联系客服！");
//			return result;
//		}
//
//		//查询该订单是否已支付，已支付则不允许再次支付
//		if(order.getStatusId().equals(Constants.STATUS_TYPE_PAIED)) {
//			orderPaidFlag = true;
////			result = String.format(result, "该订单已支付！");
////			return result;
//		}
//		//支付宝订单查询
//		Alipay alipayMap = AlipayHelper.payQueryToBean("", order.getOrderNumber());
//		if(null!=alipayMap && "T".equals(alipayMap.getIsSuccess()) && "TRADE_SUCCESS".equals(alipayMap.getResponse().getTrade().getTradeStatus())) {
//			alipayPaidFlag = true;
////				order.setStatusId(Constants.STATUS_TYPE_PAIED);
////				this.passOrderService.updateByPrimaryKey(order);
////				result  = String.format(result, "该订单支付成功！");
////				return result;
//		}     
//		//查询微信订单是否存在，存在且已支付则进行处理
//		Map<String,String> wxPayMap = WXPayHelper.getInstance().weixinPayQuery(order.getOrderNumber());
//		if(null!=wxPayMap && "SUCCESS".equals(wxPayMap.get("return_code")) && "SUCCESS".equals(wxPayMap.get("result_code")) && "SUCCESS".equals(wxPayMap.get("trade_state"))) {
//			wxPaidFlag = true;
////				order.setStatusId(Constants.STATUS_TYPE_PAIED);
////				this.passOrderService.updateByPrimaryKey(order);
////				result  = String.format(result, "该订单支付成功！");
////				return result;
//		}
//		//三者有一个未true则认为已支付成功，不能再进行再一次支付
//		if(orderPaidFlag || alipayPaidFlag || wxPaidFlag) {
//			result  = String.format(result, "该订单支付成功！");
//			return result;	
//		}
//		//支付宝
//		if(Constants.PAY_WAY_ALIPAY.equals(payRadio)) {
//			String WIDout_trade_no = order.getOrderNumber();
//			BigDecimal WIDtotal_amount = order.getPaidAccount();
//			String WIDsubject = order.getOrderName();
//			String WIDbody = order.getOrderName();
//			String returnUrl = user_return_url;
//			String noticeUrl = user_notice_url;
//			result = AlipayHelper.payResult(WIDout_trade_no, WIDtotal_amount.doubleValue()+"", WIDsubject, WIDbody, noticeUrl, returnUrl,IpUtil.getIp(request),"");
//			return result;
//		}
//		
//		//自定义微信部分
//		if(Constants.PAY_WAY_WEIXIN.equals(payRadio)) {
//			String out_trade_no = order.getOrderNumber();
//			String total_fee = NumberUtil.format(order.getPaidAccount().doubleValue()*100, 0);
//			String body = order.getOrderName();
//			String product_id = order.getId().toString();
//			String ip = IpUtil.getIp(request);
//			Map<String,String> results = WXPayHelper.getInstance().weixinPayResult(out_trade_no, total_fee, body, product_id, ip);
//			if("FAIL".equals(results.get("return_code"))) {
//				result  = String.format(result, "微信支付通讯异常，请重新尝试！");
//				return result;//通信结果验证
//			}
//			if("FAIL".equals(results.get("result_code"))) {
//				result  = String.format(result, results.get("err_code_des"));
//				return result;//通信结果验证
//			}
//			String codeUrl = results.get("code_url");//PayUrlConstants.wx_pay_notice_url
//			String qrcodeUrl = QRCodeUtil.encodeFixedPath(codeUrl, bsm.getShiroUser().getAccount());
//			result = "<form id=\"WXPayForm\" method=\"post\" action=\""+PayUrlConstants.wx_pay_notice_url+"\"> \n ";
//			result += "<input type=\"hidden\" name=\"wxpay_content\" value=\"{";
//		//	int size = results.size()-1;
//			int i = 0;
//			result += "&quot;qrcode_url&quot;:&quot;"+qrcodeUrl+"&quot;,";
//			result += "&quot;out_trade_no&quot;:&quot;"+out_trade_no+"&quot;,";
//			result += "&quot;mch_pay_ok_notice_url&quot;:&quot;"+user_return_url+"&quot;,";
//			result += "&quot;user_pay_type&quot;:&quot;weixin&quot;";
///*			for (Map.Entry<String, String> entry : results.entrySet()) {
//				result += "&quot;"+entry.getKey()+"&quot;:&quot;"+entry.getValue()+"&quot;" + (size==i?"":",");
//				i++;
//			}*/
//			result += "}\">";
//			result += "</form>";
//			result += "<script>document.forms[0].submit()</script>";
//			return result;
//		}
//		
//		//易行卡支付
//		if(Constants.PAY_WAY_YIXING.equals(payRadio)) {
//			return Constants.PAY_WAY_YIXING;
//		}
//		
//		//银联支付
//		if(Constants.PAY_WAY_UNIOIN_PAY.equals(payRadio)) {
//			String WIDout_trade_no = order.getOrderNumber();
//			BigDecimal WIDtotal_amount = order.getPaidAccount();
//			String WIDsubject = order.getOrderName();
//			String WIDbody = order.getOrderName();
//			String WIDdefaultbank = bank;
//			String ip = IpUtil.getIp(request);
//			String WIDShowUrl = "";
//			String returnUrl = user_return_url;
//			String noticeUrl = "";
//			return AlipayHelper.payWithBank(WIDout_trade_no, WIDtotal_amount.doubleValue()+"", WIDsubject, WIDbody, WIDdefaultbank, ip, WIDShowUrl, noticeUrl, returnUrl);
//		}
//		return result;
//	}
//	
//	/**
//	 * 功能说明：支付接口，航班调用（需单独处理定时关闭问题）
//	 * 修改说明：
//	 * @author 吴兆强
//	 * @date 2018年1月2日 下午4:56:38
//	 * @param user_return_url
//	 * @param user_notice_url
//	 * @param bsm
//	 * @param request
//	 * @param payRadio
//	 * @param orderNumber
//	 * @param orderId
//	 * @param bank
//	 * @return
//	 * @throws Exception
//	 */
//	public String getPayResultFlight(String user_return_url, String user_notice_url, BaseSubjectModel bsm, HttpServletRequest request, String payRadio,String orderNumber,Integer orderId,String bank) throws Exception {
//		boolean orderPaidFlag = false;
//		boolean wxPaidFlag = false;
//		boolean alipayPaidFlag = false;
//		String result  = "<form id=\"WXPayForm\" method=\"post\" action=\""+PayUrlConstants.pay_error_notice_url+"\"> \n ";
//		result += "<input type=\"hidden\" name=\"errorMsg\" value=\"";
//		result += "&quot;%s&quot;";
//		result += "\">";
//		result += "</form>";
//		result += "<script>document.forms[0].submit()</script>";
//		Map<String,Object> param = new HashMap<String, Object>();
//		PassOrder order = null;
//		if(orderNumber!=null && orderId!=null) {
//			param.put("orderNumber", orderNumber);
//			param.put("id", orderId);
//			param.put("status", Constants.STATUS_NORMAL);
//			List<PassOrder> orderSqlList = this.passOrderService.getByParam(param);
//			if(orderSqlList!=null && !orderSqlList.isEmpty() && orderSqlList.size()==1) {
//				order = orderSqlList.get(0);
//			}
//		}
//		
//		if(orderNumber!=null && orderId==null) {
//			param.clear();
//			param.put("orderNumber", orderNumber);
//			param.put("status", Constants.STATUS_NORMAL);
//			List<PassOrder> orderSqlList = this.passOrderService.getByParam(param);
//			if(orderSqlList!=null && !orderSqlList.isEmpty() && orderSqlList.size()==1) {
//				order = orderSqlList.get(0);
//			}
//		}
//		
//		if(orderNumber==null && orderId!=null) {
//			order =  this.passOrderService.getByPrimaryKey(orderId);
//		}
//		
//		if(order==null || order.getStatusId()==null) {
//			result = String.format(result, "该订单异常，请重新下单或联系客服！");
//			return result;
//		}
//		
//		//十分钟未支付则交易关闭
//		Date dateOut = DateConvert.addMinute(order.getRecordTime(), 10);
//		Date currentDate = new Date();
//		if(DateConvert.compare(currentDate, dateOut, DateStyle.YYYY_MM_DD_HH_MM_SS)>0) {
//			order.setStatusId(Constants.STATUS_TYPE_NEEDCLOSE);
//			this.passOrderService.updateByPrimaryKey(order);
//			result = String.format(result, "航班订单超时（10分钟未付款则关闭交易），请重新下单！");
//			return result;
//		}
//		
//		//判断订单支付状态，如果已支付则返回错误信息
//		//查询该订单是否已支付，已支付则不允许再次支付
//		if(order.getStatusId().equals(Constants.STATUS_TYPE_PAIED)) {
//			orderPaidFlag = true;
//		}
//		//支付宝订单查询
//		Alipay alipayMap = AlipayHelper.payQueryToBean("", order.getOrderNumber());
//		if(null!=alipayMap && "T".equals(alipayMap.getIsSuccess()) && "TRADE_SUCCESS".equals(alipayMap.getResponse().getTrade().getTradeStatus())) {
//			alipayPaidFlag = true;
//		}     
//		//查询微信订单是否存在，存在且已支付则进行处理
//		Map<String,String> wxPayMap = WXPayHelper.getInstance().weixinPayQuery(order.getOrderNumber());
//		if(null!=wxPayMap && "SUCCESS".equals(wxPayMap.get("return_code")) && "SUCCESS".equals(wxPayMap.get("result_code")) && "SUCCESS".equals(wxPayMap.get("trade_state"))) {
//			wxPaidFlag = true;
//		}
//		//三者有一个未true则认为已支付成功，不能再进行再一次支付
//		if(orderPaidFlag || alipayPaidFlag || wxPaidFlag) {
//			result  = String.format(result, "该订单支付成功！");
//			return result;	
//		}
////		if(order.getStatusId().equals(Constants.STATUS_TYPE_PAIED)) {
////			result = String.format(result, "该订单支付成功！");
////			return result;
////		}
////		
//		//是否已支付状态检测
//		//if(order.getStatusId().equals(Constants.STATUS_TYPE_NEEDPAY)) {
//			//查询该订单是否已支付，已支付则不允许再次支付
//			//支付宝订单查询
///*			Map<String,String> alipayCheckOrderMap =  AlipayHelper.payQueryToMap(order.getTransacTionNum(),  order.getOrderNumber());
//			if(alipayCheckOrderMap.get("is_success").equals("T") && alipayCheckOrderMap.get("trade_status").equals("TRADE_SUCCESS")) {
//				order.setStatusId(Constants.STATUS_TYPE_PAIED);
//				this.passOrderService.updateByPrimaryKey(order);
//				result  = String.format(result, "该订单支付成功！");
//				return result;
//			}*/
//			//微信订单查询
//			/*Map<String,String> wxPayCheckOrderMap = WXPayHelper.getInstance().weixinPayQuery(order.getOrderNumber());
//			if(wxPayCheckOrderMap.get("return_code").equals("SUCCESS") && wxPayCheckOrderMap.get("result_code").equals("SUCCESS") && wxPayCheckOrderMap.get("trade_state").equals("SUCCESS")) {
//				order.setStatusId(Constants.STATUS_TYPE_PAIED);
//				this.passOrderService.updateByPrimaryKey(order);
//				result  = String.format(result, "该订单支付成功！");
//				return result;
//			}*/
//	//	}
//
//		//支付宝
//		if(Constants.PAY_WAY_ALIPAY.equals(payRadio)) {
//			String WIDout_trade_no = order.getOrderNumber();
//			BigDecimal WIDtotal_amount = order.getPaidAccount();
//			String WIDsubject = order.getOrderName();
//			String WIDbody = order.getOrderName();
//			String returnUrl = user_return_url;
//			String noticeUrl = "";
//			result = AlipayHelper.payResult(WIDout_trade_no, WIDtotal_amount.doubleValue()+"", WIDsubject, WIDbody, noticeUrl, returnUrl,IpUtil.getIp(request),"");
//			Date updateOutDate = DateConvert.addMinute(new Date(), 10);
//			order.setRecordTime(updateOutDate);
//			this.passOrderService.updateByPrimaryKey(order);
//			return result;
//		}
//		
//		//自定义微信部分
//		if(Constants.PAY_WAY_WEIXIN.equals(payRadio)) {
//			String out_trade_no = order.getOrderNumber();
//			String total_fee = NumberUtil.format(order.getPaidAccount().doubleValue()*100, 0);
//			String body = order.getOrderName();
//			String product_id = order.getId().toString();
//			String ip = IpUtil.getIp(request);
//			Map<String,String> results = WXPayHelper.getInstance().weixinPayResult(out_trade_no, total_fee, body, product_id, ip);
//			if("FAIL".equals(results.get("return_code"))) {
//				result  = String.format(result, "微信支付通讯异常，请重新尝试！");
//				return result;//通信结果验证
//			}
//			if("FAIL".equals(results.get("result_code"))) {
//				result  = String.format(result, results.get("err_code_des"));
//				return result;//通信结果验证
//			}
//			String codeUrl = results.get("code_url");
//			String qrcodeUrl = QRCodeUtil.encodeFixedPath(codeUrl, bsm.getShiroUser().getAccount());
//			result = "<form id=\"WXPayForm\" method=\"post\" action=\""+PayUrlConstants.wx_pay_notice_url+"\"> \n ";
//			result += "<input type=\"hidden\" name=\"wxpay_content\" value=\"{";
//		//	int size = results.size()-1;
//			int i = 0;
//			result += "&quot;qrcode_url&quot;:&quot;"+qrcodeUrl+"&quot;,";
//			result += "&quot;out_trade_no&quot;:&quot;"+out_trade_no+"&quot;,";
//			result += "&quot;mch_pay_ok_notice_url&quot;:&quot;"+user_return_url+"&quot;,";
//			result += "&quot;user_pay_type&quot;:&quot;weixin&quot;";
///*			for (Map.Entry<String, String> entry : results.entrySet()) {
//				result += "&quot;"+entry.getKey()+"&quot;:&quot;"+entry.getValue()+"&quot;" + (size==i?"":",");
//				i++;
//			}*/
//			result += "}\">";
//			result += "</form>";
//			result += "<script>document.forms[0].submit()</script>";
//			Date updateOutDate = DateConvert.addMinute(new Date(), 10);
//			order.setRecordTime(updateOutDate);
//			this.passOrderService.updateByPrimaryKey(order);
//			return result;
//		}
//		
//		//易行卡支付
//		if(Constants.PAY_WAY_YIXING.equals(payRadio)) {
//			return Constants.PAY_WAY_YIXING;
//		}
//		
//		//银联支付
//		if(Constants.PAY_WAY_UNIOIN_PAY.equals(payRadio)) {
//			String WIDout_trade_no = order.getOrderNumber();
//			BigDecimal WIDtotal_amount = order.getPaidAccount();
//			String WIDsubject = order.getOrderName();
//			String WIDbody = order.getOrderName();
//			String WIDdefaultbank = bank;
//			String ip = IpUtil.getIp(request);
//			String WIDShowUrl = "";
//			String returnUrl = user_return_url;
//			String noticeUrl = "";
//			result =  AlipayHelper.payWithBank(WIDout_trade_no, WIDtotal_amount.doubleValue()+"", WIDsubject, WIDbody, WIDdefaultbank, ip, WIDShowUrl, noticeUrl, returnUrl);
//			Date updateOutDate = DateConvert.addMinute(new Date(), 10);
//			order.setRecordTime(updateOutDate);
//			this.passOrderService.updateByPrimaryKey(order);
//			return result;
//		}
//		return result;
//	}
}
